GtkVolumeButton: Define children with a GtkBuilder template
authorTristan Van Berkom <tristanvb@openismus.com>
Sat, 30 Mar 2013 09:51:58 +0000 (18:51 +0900)
committerTristan Van Berkom <tristanvb@openismus.com>
Mon, 8 Apr 2013 12:19:29 +0000 (21:19 +0900)
gtk/Makefile.am
gtk/gtk.gresource.xml
gtk/gtkvolumebutton.c
gtk/gtkvolumebutton.ui [new file with mode: 0644]
gtk/tests/templates.c

index 949fc625e33694b7ec60bf90859c4c699f644791..c75f694516d7c59b2c6956df9d44bd84b1ac8acf 100644 (file)
@@ -1117,7 +1117,8 @@ COMPOSITE_TEMPLATES =                     \
        gtkprintunixdialog.ui           \
        gtkrecentchooserdefault.ui      \
        gtkscalebutton.ui               \
-       gtkstatusbar.ui
+       gtkstatusbar.ui                 \
+       gtkvolumebutton.ui
 
 #
 # rules to generate built sources
index 7def35dd7391b222569f625a50d58a3b1380c9a9..b93d83742a9206c98033b65bd484099acf60bdfa 100644 (file)
@@ -33,5 +33,6 @@
     <file compressed="true">gtkrecentchooserdefault.ui</file>
     <file compressed="true">gtkscalebutton.ui</file>
     <file compressed="true">gtkstatusbar.ui</file>
+    <file compressed="true">gtkvolumebutton.ui</file>
   </gresource>
 </gresources>
index ceb64721f5909f2bd7868943a6e99919dc1175a0..f05aa548c900b7124769ff7d282375bfef5fb792 100644 (file)
@@ -135,6 +135,7 @@ static void
 gtk_volume_button_class_init (GtkVolumeButtonClass *klass)
 {
   GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
 
   gobject_class->set_property = gtk_volume_button_set_property;
   gobject_class->get_property = gtk_volume_button_get_property;
@@ -156,51 +157,24 @@ gtk_volume_button_class_init (GtkVolumeButtonClass *klass)
                                                          P_("Whether to use symbolic icons"),
                                                          FALSE,
                                                          G_PARAM_READWRITE));
+
+  /* Bind class to template
+   */
+  gtk_widget_class_set_template_from_resource (widget_class, "/org/gtk/libgtk/gtkvolumebutton.ui");
+  gtk_widget_class_bind_callback (widget_class, cb_query_tooltip);
+  gtk_widget_class_bind_callback (widget_class, cb_value_changed);
 }
 
 static void
 gtk_volume_button_init (GtkVolumeButton *button)
 {
-  GtkScaleButton *sbutton = GTK_SCALE_BUTTON (button);
-  GtkAdjustment *adj;
-  GtkWidget *minus_button, *plus_button;
-
-  atk_object_set_name (gtk_widget_get_accessible (GTK_WIDGET (button)),
-                      _("Volume"));
-  atk_object_set_description (gtk_widget_get_accessible (GTK_WIDGET (button)),
-                      _("Turns volume down or up"));
-  atk_action_set_description (ATK_ACTION (gtk_widget_get_accessible (GTK_WIDGET (button))),
-                             1,
-                             _("Adjusts the volume"));
-
-  minus_button = gtk_scale_button_get_minus_button (sbutton);
-  plus_button = gtk_scale_button_get_plus_button (sbutton);
-
-  atk_object_set_name (gtk_widget_get_accessible (minus_button),
-                      _("Volume Down"));
-  atk_object_set_description (gtk_widget_get_accessible (minus_button),
-                      _("Decreases the volume"));
-  gtk_widget_set_tooltip_text (minus_button, _("Volume Down"));
-
-  atk_object_set_name (gtk_widget_get_accessible (plus_button),
-                      _("Volume Up"));
-  atk_object_set_description (gtk_widget_get_accessible (plus_button),
-                      _("Increases the volume"));
-  gtk_widget_set_tooltip_text (plus_button, _("Volume Up"));
-
-  gtk_scale_button_set_icons (sbutton, (const char **) icons);
-
-  adj = gtk_adjustment_new (0., 0., 1., 0.02, 0.2, 0.);
-  g_object_set (G_OBJECT (button),
-               "adjustment", adj,
-               "size", GTK_ICON_SIZE_SMALL_TOOLBAR,
-               "has-tooltip", TRUE,
-               NULL);
-
-  g_signal_connect (G_OBJECT (button), "query-tooltip",
-                   G_CALLBACK (cb_query_tooltip), NULL);
-  g_signal_connect (G_OBJECT (button), "value-changed",
-                   G_CALLBACK (cb_value_changed), NULL);
+  GtkWidget *widget = GTK_WIDGET (button);
+
+  gtk_widget_init_template (widget);
+
+  /* The atk action description is not supported by GtkBuilder */
+  atk_action_set_description (ATK_ACTION (gtk_widget_get_accessible (GTK_WIDGET (widget))),
+                             1, _("Adjusts the volume"));
 }
 
 /**
diff --git a/gtk/gtkvolumebutton.ui b/gtk/gtkvolumebutton.ui
new file mode 100644 (file)
index 0000000..4c253a3
--- /dev/null
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface domain="gtk30">
+  <!-- interface-requires gtk+ 3.6 -->
+  <object class="GtkAdjustment" id="adjustment">
+    <property name="upper">1</property>
+    <property name="step_increment">0.02</property>
+    <property name="page_increment">0.20000000000000001</property>
+  </object>
+  <template class="GtkVolumeButton" parent="GtkScaleButton">
+    <property name="visible">True</property>
+    <property name="can_focus">True</property>
+    <property name="receives_default">True</property>
+    <property name="has_tooltip">True</property>
+    <property name="relief">none</property>
+    <property name="focus_on_click">False</property>
+    <property name="orientation">vertical</property>
+    <property name="adjustment">adjustment</property>
+    <property name="icons">audio-volume-muted
+audio-volume-high
+audio-volume-low
+audio-volume-medium</property>
+    <child internal-child="accessible">
+      <object class="AtkObject" id="GtkVolumeButton-atkobject">
+        <property name="AtkObject::accessible-name" translatable="yes">Volume</property>
+        <property name="AtkObject::accessible-description" translatable="yes">Turns volume up or down</property>
+      </object>
+    </child>
+    <signal name="query-tooltip" handler="cb_query_tooltip" swapped="no"/>
+    <signal name="value-changed" handler="cb_value_changed" swapped="no"/>
+    <child internal-child="plus_button">
+      <object class="GtkButton" id="scalebutton-plus_button1">
+        <property name="label" translatable="yes">+</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">True</property>
+        <property name="tooltip_text" translatable="yes">Volume Up</property>
+        <property name="relief">none</property>
+        <child internal-child="accessible">
+          <object class="AtkObject" id="scalebutton-plus_button1-atkobject">
+            <property name="AtkObject::accessible-name" translatable="yes">Volume Up</property>
+            <property name="AtkObject::accessible-description" translatable="yes">Increases the volume</property>
+          </object>
+        </child>
+      </object>
+    </child>
+    <child internal-child="minus_button">
+      <object class="GtkButton" id="scalebutton-minus_button1">
+        <property name="label" translatable="yes">-</property>
+        <property name="can_focus">True</property>
+        <property name="receives_default">True</property>
+        <property name="tooltip_text" translatable="yes">Volume Down</property>
+        <property name="relief">none</property>
+        <child internal-child="accessible">
+          <object class="AtkObject" id="scalebutton-minus_button1-atkobject">
+            <property name="AtkObject::accessible-name" translatable="yes">Volume Down</property>
+            <property name="AtkObject::accessible-description" translatable="yes">Decreases the volume</property>
+          </object>
+        </child>
+      </object>
+    </child>
+  </template>
+</interface>
index e666c1ce5cd49c4fcac3b4d54815e38d5962f311..32c1e680804a34627df98bc08b00a28a1a1383e0 100644 (file)
@@ -124,6 +124,16 @@ test_scale_button_basic (void)
   gtk_widget_destroy (widget);
 }
 
+static void
+test_volume_button_basic (void)
+{
+  GtkWidget *widget;
+
+  widget = gtk_volume_button_new ();
+  g_assert (GTK_IS_VOLUME_BUTTON (widget));
+  gtk_widget_destroy (widget);
+}
+
 static void
 test_statusbar_basic (void)
 {
@@ -327,6 +337,7 @@ main (int argc, char **argv)
   g_test_add_func ("/Template/GtkLockButton/Basic", test_lock_button_basic);
   g_test_add_func ("/Template/GtkAssistant/Basic", test_assistant_basic);
   g_test_add_func ("/Template/GtkScaleButton/Basic", test_scale_button_basic);
+  g_test_add_func ("/Template/GtkVolumeButton/Basic", test_volume_button_basic);
   g_test_add_func ("/Template/GtkStatusBar/Basic", test_statusbar_basic);
   g_test_add_func ("/Template/GtkAppChooserWidget/Basic", test_app_chooser_widget_basic);
   g_test_add_func ("/Template/GtkAppChooserDialog/Basic", test_app_chooser_dialog_basic);